Python 24일 코스 - Day 19: 데이터베이스 SQLite

Day 19: 데이터베이스 SQLite

SQLite 연결과 테이블 생성

import sqlite3

conn = sqlite3.connect("myapp.db")
cursor = conn.cursor()

cursor.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        email TEXT UNIQUE,
        age INTEGER
    )
""")
conn.commit()

CRUD 기본 연산

# Create: 데이터 삽입
cursor.execute(
    "INSERT INTO users (name, email, age) VALUES (?, ?, ?)",
    ("철수", "cs@example.com", 25)
)
conn.commit()

# Read: 데이터 조회
cursor.execute("SELECT * FROM users WHERE age >= ?", (20,))
rows = cursor.fetchall()
for row in rows:
    print(row)

# Update: 데이터 수정
cursor.execute(
    "UPDATE users SET age = ? WHERE name = ?",
    (26, "철수")
)
conn.commit()

# Delete: 데이터 삭제
cursor.execute("DELETE FROM users WHERE name = ?", ("철수",))
conn.commit()

여러 행 삽입

users_data = [
    ("영희", "yh@example.com", 28),
    ("민수", "ms@example.com", 22),
    ("지은", "je@example.com", 30),
]

cursor.executemany(
    "INSERT INTO users (name, email, age) VALUES (?, ?, ?)",
    users_data
)
conn.commit()

Row Factory로 딕셔너리 결과

conn.row_factory = sqlite3.Row
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(f"{row['name']}: {row['email']}")

컨텍스트 매니저로 안전하게

def get_users(min_age=0):
    with sqlite3.connect("myapp.db") as conn:
        conn.row_factory = sqlite3.Row
        cursor = conn.cursor()
        cursor.execute(
            "SELECT * FROM users WHERE age >= ? ORDER BY name",
            (min_age,)
        )
        return [dict(row) for row in cursor.fetchall()]

users = get_users(25)
for user in users:
    print(user)

오늘의 연습문제

  1. 할 일 관리 앱의 DB를 설계하고 CRUD 함수를 구현하세요.
  2. 가계부 테이블을 만들어 수입/지출 내역과 월별 합계를 조회하세요.
  3. 두 테이블(사용자, 주문)을 JOIN하여 조회하는 쿼리를 작성하세요.

이 글이 도움이 되었나요?